#ifndef _DRV_DB_COLUMN_H
#define _DRV_DB_COLUMN_H

#include "drv_db_common.h"

#include <stdbool.h>
#include <stdint.h>
#include <string.h>

typedef struct
{
	db_line_col_t* insert_data;
	size_t data_count;
}db_col_insert_param_t;

/***************************************************************
* Name:   db_col_insert_data()
* Input : db 数据库 table_name 操作的表 data 插入数据
* Output: void 
* Return: SQLITE_OK 合格
* Author: heweilong
* Revise: V1.3
* Description: 插入数据主函数
***************************************************************/
int db_col_insert_data(sqlite3* db, const char* table_name, const db_col_insert_param_t data);

/*  删除数据的参数 */
typedef struct {
	db_where_condition_t* param;	//参数队列
	size_t param_count;						//队列长度
} db_col_delete_param_t;

/***************************************************************
* Name:   db_col_insert_data()
* Input : db 数据库 table_name 操作的表 data 插入数据
* Output: void 
* Return: SQLITE_OK 合格
* Author: heweilong
* Revise: V1.2
* Description: 删除数据
***************************************************************/
int db_col_delete_data(sqlite3* db, const char* table_name, db_col_delete_param_t param);

/* 更新参数结构体 */
typedef struct {
	db_column_value_t* set_columns;		// 要更新的列
	size_t set_count;									// 更新列数量
	db_where_condition_t* conditions;	// WHERE条件
	size_t condition_count;						// 条件数量
} db_update_param;

/***************************************************************
* Name:   db_col_update_data()
* Input : db 数据库 table_name 表名 param 更新参数
* Output: void 
* Return: SQLITE_OK 合格
* Author: heweilong
* Revise: V1.2
* Description: 更新数据
***************************************************************/
int db_col_update_data(sqlite3* db, const char* table_name, db_update_param param);

/* 查询参数结构体 */
typedef struct {
	const char** select_columns;			// 要查询的列名数组
	size_t column_count;							// 列数量
	db_where_condition_t* conditions;	// WHERE条件
	size_t condition_count;						// 条件数量
} db_select_param;

/* 查询结果数据结构 */
typedef struct db_result_node {
	db_column_value_t* columns;		// 列数据数组
	size_t column_count;					// 列数量
	struct db_result_node* next;	// 下一个节点
} db_result_node;

typedef struct {
	db_result_node* head;					// 队列头指针
	db_result_node* tail;					// 队列尾指针
	size_t count;									// 记录总数
} db_result_queue;

/***************************************************************
* Name:   db_col_query_data()
* Input : db 数据库 table_name 表名 select_columns 选择的列名 col_count 选择的列数量 conditions 选择条件 cond_count 条件数量
* Output: void 
* Return: SQLITE_OK 合格
* Author: heweilong
* Revise: V1.2
* Description: 查询数据
***************************************************************/
db_result_queue* db_col_query_data(sqlite3* db, const char* table_name, db_select_param param);

/***************************************************************
* Name:   db_col_select_res_free()
* Input : queue 结果队列
* Output: void 
* Return: void
* Author: heweilong
* Revise: V1.2
* Description: 释放结果队列内存
***************************************************************/
void db_col_select_res_free(db_result_queue* queue);

/***************************************************************
* Name:   printf_node_info()
* Input : node 结果节点
* Output: void 
* Return: void
* Author: heweilong
* Revise: V1.1
* Description: 打印节点信息
***************************************************************/
void printf_node_info(db_result_node* node);
#endif